#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <sys/wait.h>
#include <stdlib.h>


int main()
{
    /* 打开文件 */
    int fd = open("./record.txt",O_RDWR);
    if(fd == -1)
    {
        perror("open error!");
        exit(1);
    }
    /* 获取文件大小 -*/
    int length = lseek(fd,0,SEEK_END);
    /* 创建勾选内存 */
    char * addr = (char *)mmap(NULL,length,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
    if(addr == (char *)-1)
    {
        perror("mmap error!");
        exit(1);
    }
    /* 关闭文件 */
    close(fd);

    /* 创建父子进程 */
    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork error!");
        exit(1);
    }
    else if(pid == 0)
    {
        /* 子进程 */
        sleep(1);
        printf("addr = %s\n",addr);
    }
    else if(pid > 0)
    {
        /* 父进程 */
        const char * data = "海中月是天上月，眼前人是心上人";

        /* 写入数据 */
        strcpy(addr,data);

        /* 阻塞回收 */
        wait(NULL);
        printf("回收成功!\n");
    }

    return 0;
}